/**
 * 
 */
package pactoes;

import java.nio.Buffer;
import java.nio.ByteBuffer;

import sun.misc.CRC16;

/**
 * @author hitek
 *
 */
public class Ack {
	
	private String origem;
	private String destino;
	private String nomeArquivo;
	private byte INICIO = (byte)254;
	private byte ESTCONEXAO = (byte)248;
	private byte FIM = (byte)255;
	
	
	public Ack(String origem, String destino, String nomeArquivo){
		this.origem = origem;
		this.destino = destino;
		this.nomeArquivo = nomeArquivo;
		
	}
	
	
	
	
	public byte[] getAck(){
		int tamPacote = 9+nomeArquivo.length();
		int tam1 = tamPacote/256;
		int tam2 = tamPacote%256;
		String ret = INICIO+""+ESTCONEXAO+""+tam1+tam2+origem+destino;
		String temp = ret+nomeArquivo+FIM;
		int bcc = getCRC(temp);
		int bcc1 = bcc/256;
		int bcc2 = bcc%256;
		ret=ret+bcc1+bcc2+nomeArquivo+FIM;
		byte[] retorno = ret.getBytes();
		ByteBuffer bf = ByteBuffer.allocate(2);
		
		bf.putInt(248);
		bf.putInt(0);
		bf.putInt(23);
		bf.putInt(1);
		bf.putInt(2);
		
		
		return retorno;
	
	}
	
	public int getCRC(String b){
		CRC16 crc = new CRC16();
		byte[] t = b.getBytes();
		for (int i = 0; i < t.length; i++) {
			crc.update(t[i]);
		}
		return crc.value;
	}


	/**
	 * @return the origem
	 */
	public String getOrigem() {
		return origem;
	}


	/**
	 * @param origem the origem to set
	 */
	public void setOrigem(String origem) {
		this.origem = origem;
	}


	/**
	 * @return the destino
	 */
	public String getDestino() {
		return destino;
	}


	/**
	 * @param destino the destino to set
	 */
	public void setDestino(String destino) {
		this.destino = destino;
	}


	/**
	 * @return the nomeArquivo
	 */
	public String getNomeArquivo() {
		return nomeArquivo;
	}


	/**
	 * @param nomeArquivo the nomeArquivo to set
	 */
	public void setNomeArquivo(String nomeArquivo) {
		this.nomeArquivo = nomeArquivo;
	}
	

}
